草庐IT

Java final 与 C++ const

全部标签

c++ - 私有(private)成员 : Static const vs. 只是 const

当一个对象具有一些不会改变并且在其整个功能中都需要的特征时,我正在尝试确定最佳选择。静态常量成员Const成员在我看来,静态成员的真正原因是拥有一个可以更改的变量,从而影响同一类的所有其他对象。但是,有人建议将类“不变量”作为静态常量成员。我正在寻找有关建立类常量的推荐方法及其原因的一些见解。 最佳答案 “不会改变”不够准确。这里的主要问题是类的不同对象是否需要具有这些const成员的不同值(即使它们在对象的生命周期内没有改变)或者所有对象都应该使用(共享)相同的值。如果类的所有对象的值都相同,那么当然应该是类的staticcons

c++ - 为什么我不能将 const 映射结构传递给 C++ 中的函数?

我尝试将const与vector一起工作:例如:voiddamn(constvector&bb){for(inti=0;i但是当尝试使用map时,它不会:voidpas(constmap&mm){cout我想知道为什么没有。 最佳答案 map::operator[]有点奇怪。它这样做:寻找key。如果找到,归还。如果不是,则插入并默认构造其关联值。然后返回对新值的引用。第3步与constness不兼容。该语言没有两个功能不同的operator[]重载,而是强制您对const对象使用map::find。或者,有人可能会争辩说,如果参数

c++ - 将子字符串从 const char* 复制到 std::string

是否有任何可用的复制函数允许子字符串到std::string?例子-constchar*c="Thisisateststringmessage";我想将子字符串“test”复制到std::string。 最佳答案 您可以使用std::stringiteratorconstructor用C字符串的子字符串初始化它,例如:constchar*sourceString="Helloworld!";std::stringtestString(sourceString+1,sourceString+4);

c++ - 什么时候成员函数应该同时是 const 和 volatile?

我在阅读有关volatile成员函数的内容时发现成员函数可以同时是const和volatile的断言。我没有真正使用过这样的东西。任何人都可以分享他们在将成员函数同时用作const和volatile的实际使用方面的经验。我写了小类来测试同样的:classTemp{public:Temp(intx):X(x){}intgetX()constvolatile{returnX;}intgetBiggerX(){returnX+10;}private:intX;};voidtest(constvolatileTemp&aTemp){intx=aTemp.getX();}intmain(inta

c++ - STL 容器赋值和 const 指针

编译:int*p1;constint*p2;p2=p1;这不是:vectorv1;vectorv2;v2=v1;//Error!v2=static_cast>(v1);//Error!嵌套const指针的类型等价规则是什么?我认为转换是隐式的。此外,我宁愿不实现STL容器的逐点分配,除非我真的必须这样做。 最佳答案 直接赋值是不可能的。正如其他人所解释的那样,等价性不是由指针类型建立的,而是由容器类型建立的。在这种情况下,vector不想接受另一个具有不同但兼容的元素类型的vector。没有真正的问题,因为您可以使用assign成员

c++ - 是否有扩展让优化器假定 const-ref 参数将保持常量?

与我之前的问题相关:Arecompilersnotallowedtoassumeconst-refparameterswillstayconst?我的新问题是:是否有特定于编译器的非标准扩展或语法来告诉GCC/Clang/MSVC对象不可写?例如,这是我希望能够编写的一些伪代码:voidf(constint&i){//Atthispoint,compilerdoesn'tknowif"i"canbemutatedornot,//soitassumesitcan//Fake-ish--compilernowassumes"i"cannotbemutatedandoptimizesacco

c++ - 条件运算符 + upcast + const 引用

灵感来自thisquestion,我尝试了以下代码:structA{virtualvoiddoit()const=0;};structB:publicA{virtualvoiddoit()const;};structC:publicA{virtualvoiddoit()const;};voidfoo(boolp){constA&a=(p?static_cast(B()):static_cast(C()));a.doit();}EverycompilerIhavetried使用-Wall-Werror接受此代码并生成我想要的程序集。但是在仔细阅读了C++03规范第12.2节(“临时对象”

c++ - operator[](const char *) 歧义

下面的代码#includestructFoo{operatordouble(){return1;}intoperator[](std::stringx){return1;}};intmain(){Foo()["abcd"];}使用g++编译良好,但使用clang和intel编译器编译失败,因为声明的方法和native运算符[]之间存在歧义。如果Foo隐式转换为int,我会很清楚,但这里转换为double。这不是解决了歧义吗? 最佳答案 §13.3.3.1.2[over.ics.user]/p1-2:Auser-definedconv

C++ [错误] 'operator==' 不匹配(操作数类型为 'Vehicle' 和 'const Vehicle')

我正在为我的学校做一个项目(我还是个初学者),我遇到了以下问题:"[Error]nomatchfor'operator=='(operandtypesare'Vehicle'and'constVehicle')"Vehicle是我项目中的一个类。这就是给我错误的原因:intDayLog::findWaitingPosistion(Vehicleconst&v){if(find(waitingList.begin(),waitingList.end(),v)!=waitingList.end())return1;}waitingList是Vehicle对象的vector。我搜索并找不到答

c++ - 为什么 `const` 会作用于它之前的那个东西?

我正在学习C++。在我的类(class)中,解释说最好将const立即放置在您想要使其不可更改的内容之后,因为这就是const的方式有效。很多人,包括BjarneStroustrup本人,都喜欢在前面写const。但这有时会导致问题:constint*foo;//modifiablepointertoaconstantint.intconst*bar;//constantpointertoamodifiableint?No!It'samodifiablepointertoaconstantint.(Sothesametypeasfoo)一个显示此操作的示例:intfun(intcons